True Macros
“True macros” という表現は Quoraより拝借。 C/C++のマクロは単純な文字列の置換であるのに対し、Lispのマクロは「評価前のコードを受け取り、コードを返す」関数の一種です。その柔軟さゆえ、while、forといった通常言語仕様として定義されているような構文すらもマクロとして記述することができます。文法そのものを自己改変できる性質ゆえに、真のマクロを持つ言語を用いたプログラミングは、プログラマーごと、プロジェクトごとにDSL(ドメイン固有言語)を作るようなものと形容されます。 As well as writing their programs down toward the language, experienced Lisp programmers build the language up toward their programs.
熟練したLispプログラマは、そのプログラミング言語に則ってプログラムを書くのと同時に、自分の書くプログラムに則ってプログラミング言語を構築していく。
On Lisp - Paul Graham Preface
このような柔軟性は 同図像性 によって実現されています。ちなみにJuliaのマクロもこのタイプです。